#include <iostream>
#include <string>
#include <ctime>
#include <unistd.h>
#include "blockquque_cp.hpp"

void *customer(void *args)
{
    block_queue<int> *bq = static_cast<block_queue<int> *>(args);
    while (true)
    {
        int data = 0;
        bq->Pop(&data);
        std::cout << "customer pop->" << data << std::endl;
    }
}

void *productor(void *args)
{
    srand(time(nullptr) ^ getpid());
    block_queue<int> *bq = static_cast<block_queue<int> *>(args);
    while (true)
    {
        int data = rand() % 10 + 1;
        bq->Push(data);
        std::cout << "productor push -> " << data << std::endl;
        sleep(1);
    }
}

// int main()
// {
//     // 创建一个阻塞队列
//     block_queue<int> *bq = new block_queue<int>();
//     // 创建线程
//     pthread_t cums[3], pru[3];
//     for (int i = 0; i < 3; i++)
//     {
//         pthread_create(cums + i, nullptr, customer, bq);
//         pthread_create(pru + i, nullptr, productor, bq);
//     }

//     for (int i = 0; i < 3; i++)
//     {
//         pthread_join(cums[i], nullptr);
//         pthread_join(pru[i], nullptr);
//     }

//     return 0;
// }

// 单生产，单消费
int main()
{
    // 创建一个阻塞队列
    block_queue<int>* bp = new block_queue<int>();
    // 创建线程
    pthread_t c, p;
    pthread_create(&c, nullptr, customer, (void*)bp);
    pthread_create(&p, nullptr, productor, (void*)bp);

    pthread_join(c,nullptr);
    pthread_join(p,nullptr);
    return 0;
}
